草庐IT

c++ - std::thread Visual Studio 2012 警告

全部标签

c++ - 确定 CPU 缓存中值的值和/或地址

有没有办法准确确定当前或所有进程的CPU缓存(L1、L2等)中当前驻留的值、内存地址和/或其他信息?我已经做了很多阅读,其中展示了如何优化程序以更有效地利用CPU缓存。但是,我正在寻找一种方法来真正确定某些方法是否有效。底线:是否有可能100%确定什么进入和不进入CPU缓存。搜索此主题会返回几个关于如何确定缓存大小的结果,但不会返回内容。编辑:澄清下面的一些评论:由于软件无疑会改变缓存,CPU制造商是否有提供此功能的工具/硬件诊断系统(内置)? 最佳答案 如果不使用专用硬件,您无法直接检查CPU缓存中的内容。运行任何软件来检查CPU

C++ Windows MFC 并发 : Get thread to wait until particular state achieved

在WindowsMFC并发上,我如何告诉我的当前线程等待直到达到特定状态?目前我能想到的唯一方法是执行周期性sleep并检查状态——当我们处于预期状态时,然后继续。有更好的方法吗?BOOLachieved=FALSE;intmain(intargc,char**argv){//Thisfunctioncreatesanewthreadandmodifiesthe'achieved'globalvariableatsomepointinthefuturedoSomethingOnAnotherThread();//Waitmaximum4secondsfor'achieved'tobeT

c - 在 C 中初始化地址为零的变量

这可能是一个非常基本的问题。我知道有一个C约定将空指针的值设置为零。您是否有可能在Windows中为新变量分配空间,而分配空间的地址恰好为零?如果不是,通常占用该地址区域的是什么? 最佳答案 在MS-DOS上,空指针是一个相当有效的指针,并且由于操作系统在realmode中运行实际上有可能用垃圾覆盖0x0地址并破坏内核。你可以这样做:inti;unsignedchar*ptr=(unsignedchar*)0x0;for(i=0;i现代操作系统(例如Linux、Windows)在protectedmode中运行它永远不会让您直接访问

c# - 如何使用适用于 Windows 8 的 Visual Studio Express 2012 创建适用于 Windows XP 的应用程序

我对桌面应用知之甚少。我使用适用于Windows8的免费VisualStudioExpress2012(使用C#、XAML)为Windows8创建了一个简单的应用程序。现在我希望该应用程序可以在WindowsXP、Windows7等其他Windows平台上运行。据我了解,Metro应用程序不能在Windows7或XP上运行,但我想要的只是我的应用程序的精简版本它也可以在Windows7和XP上运行。我正在寻找类似Project->News->TargetWindowsXP的选项...我还有另一个问题,我们是否可以使用XAML、.CS方法,即使对于WindowsXP。如何使用C#并利用当

c - 如何在 ring0(内核模式)中使用 winapi 函数?

我无法在驱动程序中调用FileTimeToSystemTime()方法。错误是:错误C4013:“FileTimeToSystemTime”未定义;假设extern返回int。我也不能包含windows.h,因为我已经包含了ntddk.h,它会导致很多错误。如果我在header中将其声明为BOOLFileTimeToSystemTime(INconstPFILETIME,OUTPSYSTEMTIME);我会收到下一个错误:错误C2061:语法错误:标识符“FileTimeToSystemTime”错误C2059:语法错误:';'错误C2059:语法错误:“类型”错误C4013:“Fil

c++ - (C/C++) Windows 7 中的 EOF

#includevoidfcopy(FILE*from,FILE*to);intmain(){fcopy(stdin,stdout);return0;}voidfcopy(FILE*from,FILE*to){intc;while((c=getc(from))!=EOF){putc(c,to);}}当我运行这个程序时,^Z(Ctrl+z)会发生一些意外行为,我会用它来指示EOF。我输入的“hello\n”在“fcopy”中执行while循环以打印相同内容。"^Z\n"结束程序。但是如果我输入“blahblah^Zasdfasdf\n”,虽然我希望程序打印“blahblah”并终止,但它

c - 了解 C 中的缓冲

我真的很难理解缓冲的深度,尤其是在C编程中,我在这个主题上搜索了很长时间,但直到现在还没有找到令人满意的东西。我会更具体一点:我确实理解它背后的概念(即不同硬件设备的操作协调和最小化这些设备的速度差异)但我希望能更全面地解释这些和其他潜在的缓冲原因(我的意思是完整的)越长越深越好)给出一些具体的例子来说明缓冲是如何在I/O流中实现的。其他问题是我注意到我的程序没有遵循缓冲区刷新中的一些规则,这听起来很奇怪,就像下面的简单片段:#includeintmain(void){FILE*fp=fopen("hallo.txt","w");fputc('A',fp);getchar();fput

c - 如何区分16位MZ和32位MZ

我需要区分32位PE和16位DOSMZ。正确的做法是什么?我可以使用启发式方法,例如查找PEheader,但我觉得它不一定是确定性的 最佳答案 所有DOS风格的可执行文件都有一个“MZ”作为前两个字节。要识别MSDOS可执行文件与众多其他变体,最好的办法似乎是读取文件中偏移量0x0018处重定位表的位置,如果它大于0x0040(进入文件),则它不仅仅是普通的DOS.为了明确地将可执行文件标识为“PE”可执行文件,在文件中的偏移量0x003C处有一个指针。这是文件中的偏移量,将包含字节“PE”和两个空值。其他MSDOS的“MZ”变体将

windows - 用于获取运行 Windows Server 2012 的服务器上安装的所有语言包的 Powershell 命令

如何通过powershell命令找到我的服务器(windowsserver2012)上安装的所有语言包?我喜欢(通过脚本)识别我的服务所需的任何语言是否未安装,然后运行​​DISM以添加缺少的语言包。 最佳答案 您可以解析DISM输出:$LangPacks=DISM.exe/Online/Get-Intl/English|Select-String-SimpleMatch'Installedlanguage(s)'|ForEach-Object{if($_-match':\s*(.*)'){$Matches[1]}}if($Lang

.net - 线程是否可以在临界区中间被抢占?

是否可以通过在Windows中禁用中断来实现临界区锁定?如果是这种情况,则当线程处于临界区中间时,它不能被抢占。但如果是这种情况,即如果一个线程在执行关键部分时不能被抢占,那将使得脉冲监视器的整个点不如如果即使线程处于关键部分的中间,也可能会要求线程撤出CPU。所以,我真正的问题是:在Windows中如何实现监视器?线程处于临界区中间时是否可以被抢占? 最佳答案 Windows的设计使得线程,即使在内核模式下运行,arealwayspreemptibleandalwaysinterruptible.所以临界区肯定不是通过禁止中断来实